package LambdaDemo;

/**
 * @Author: ylc
 * @Description:Lambda表达式的使用（简化匿名内部类）
 * @Date Created in 2022-04-23 14:23
 */
public class LambdaDemo1 {
    public static void main(String[] args) {
        /*
         * 使用前提：
         *      1. 使用Lambda必须具有接口，且要求接口中有且仅有一个抽象方法。
         *          无论是JDK内置的`Runnable`、`Comparator`接口还是自定义的接口，只有当接口中的抽象方法存在且唯一时（函数式接口），才可以使用Lambda。
         *      2. 使用Lambda必须具有上下文推断。
         *          也就是方法的参数或局部变量类型必须为Lambda对应的接口类型，才能使用Lambda作为该接口的实例。
         * Lambda表达式的标准格式为：
         *      (参数类型 参数名称) -> { 代码语句 }
         * 在Lambda标准格式的基础上，使用省略写法的规则为：
         *      1. 小括号内参数的类型可以省略；
         *      2. 如果小括号内有且仅有一个参，则小括号可以省略；
         *      3. 如果大括号内有且仅有一个语句，则无论是否有返回值，都可以省略大括号、return关键字及语句分号。
         */
        //使用匿名内部类的方式,实现多线程
        new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+" 新线程创建了");
            }
        }).start();
        //使用Lambda表达式,实现多线程
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+" 新线程创建了");
        }
        ).start();
        //优化省略Lambda
        new Thread(()->System.out.println(Thread.currentThread().getName()+" 新线程创建了")).start();
    }
}
